package ui.controller;

import java.awt.Dimension;

import javax.swing.JOptionPane;

import domain.Speler;
import domain.iSpelerTeken;
import domain.exceptions.DomainException;
import domain.model.Board;
import domain.model.iGame;
import ui.view.BoardViewChar;
import ui.view.UIException;

public class TicTacToeControllerAfbeelding implements iController {
	private iGame model;
	private Speler speler;
	private BoardViewChar view;

	public TicTacToeControllerAfbeelding(iGame ticTacToeGame, Speler player,
			int locationslot) {
		this.model = ticTacToeGame;
		this.speler = player;

		try {
			view = new BoardViewChar(this, player.getSpelerNaam(), locationslot);
			view.setVisible(true);
		} catch (UIException e) {
			JOptionPane.showInputDialog(e.getMessage());
		}
		ticTacToeGame.registerObserver(view);
	}

	@Override
	public Dimension getBoardSize() {
		Dimension boardSize = new Dimension(getNumberOfColumns() * 80,
				getNumberOfRows() * 80);
		return boardSize;
	}

	@Override
	public int getNumberOfRows() {
		return model.getBoard().getHeight();
	}

	@Override
	public int getNumberOfColumns() {
		return model.getBoard().getWidth();
	}

	@Override
	public void enable(boolean enabled) {
		view.setEnabled(enabled);
		if (enabled) {
			view.speelbaar();
		} else {
			view.onspeelbaar();
		}
	}

	@Override
	public void play(int rowClicked, int columnClicked) {
		try {
			model.play(rowClicked, columnClicked);
			//checkGameOver();
		} catch (DomainException ex) {
			JOptionPane.showMessageDialog(null, ex.getMessage());
		}
	}

	@Override
	public void updateEnemy(String enemyName) {
		view.setEnemyName(enemyName);
		view.update(model);
	}

	@Override
	public iSpelerTeken getSpelerTeken() {
		return this.speler.getSpelerTeken();
	}
		

	private void setTekens(iSpelerTeken teken1, iSpelerTeken teken2) {
		this.model.setSigns(teken1, teken2);
	}

	public String getSpelerName() {
		return speler.getSpelerNaam();
	}

	public void updateValues(TicTacToeControllerAfbeelding tictactoe2) {
		setTekens(tictactoe2.getSpelerTeken(), getSpelerTeken());
		updateEnemy(tictactoe2.getSpelerName());
	}

	@Override
	public void checkTeken(iSpelerTeken spelerChar) {
		if ((Character)getSpelerTeken().getTeken() == spelerChar.getTeken()) {
			JOptionPane.showMessageDialog(null, "Teken: '" + spelerChar
					+ "' is al in gebruik");
			speler.vraagTeken();
			this.model.setSigns(speler.getSpelerTeken());
		}

	}
/*
	@Override
	public boolean checkGameOver() {
		// check kolom
		try{
		for (int j = 0; j < model.getBoard().getBoard().length; j++) {
			for (int i = 0; i < model.getBoard().getBoard().length; i++) {
				
				if (model.getBoard().getBoard()[j][i].getTeken() != speler
						.getSpelerTeken().getTeken())
					break;
				if (i == model.getBoard().getBoard().length - 1) {
					JOptionPane.showMessageDialog(null, "Speler "
							+ getSpelerName() + " heeft gewonnen");
					return true;
				}
			}

			// check rij
			for (int i = 0; i < model.getBoard().getBoard().length; i++) {
				if (model.getBoard().getBoard()[i][j].getTeken() != speler
						.getSpelerTeken().getTeken())
					break;
				if (i == model.getBoard().getBoard().length - 1) {
					JOptionPane.showMessageDialog(null, "Speler "
							+ getSpelerName() + " heeft gewonnen");
					return true;
				}
			}
			
		}
		}catch (NullPointerException e){}
		return false;
	}

	@Override
	public void GameOver(iSpelerTeken tekenWinnaar) {
		view.setEnabled(false);
		view.redrawBoardGameOver((Character)tekenWinnaar.getTeken());

	}
	*/

	@Override
	public String getTitel() {
		return model.getTitel();
	}

	@Override
	public Board getBoard() {
		return model.getBoard();
	}

	@Override
	public boolean checkGameOver() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public void gewonnen() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void verloren() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void askNewGame() {
		// TODO Auto-generated method stub
		
	}

}
